{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# w2_冯炳驹_124298228\n",
    "# SVM分类计数\n",
    "采用老师提供的特征工程，并对数据进行截取，采用1%数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "#竞赛的评价指标为logloss\n",
    "from sklearn.metrics import log_loss  \n",
    "#SVM并不能直接输出各类的概率，所以在这个例子中我们用正确率作为模型预测性能的度量\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>40.7145</td>\n",
       "      <td>-73.9425</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7947</td>\n",
       "      <td>-73.9667</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7388</td>\n",
       "      <td>-74.0018</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7539</td>\n",
       "      <td>-73.9677</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>40.8241</td>\n",
       "      <td>-73.9493</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 225 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  latitude  longitude  price  price_bathrooms  \\\n",
       "0        1.5         3   40.7145   -73.9425   3000           1200.0   \n",
       "1        1.0         2   40.7947   -73.9667   5465           2732.5   \n",
       "2        1.0         1   40.7388   -74.0018   2850           1425.0   \n",
       "3        1.0         1   40.7539   -73.9677   3275           1637.5   \n",
       "4        1.0         4   40.8241   -73.9493   3350           1675.0   \n",
       "\n",
       "   price_bedrooms  room_diff  room_num  Year       ...        walk  walls  \\\n",
       "0      750.000000       -1.5       4.5  2016       ...           0      0   \n",
       "1     1821.666667       -1.0       3.0  2016       ...           0      0   \n",
       "2     1425.000000        0.0       2.0  2016       ...           0      0   \n",
       "3     1637.500000        0.0       2.0  2016       ...           0      0   \n",
       "4      670.000000       -3.0       5.0  2016       ...           0      0   \n",
       "\n",
       "   war  washer  water  wheelchair  wifi  windows  work  interest_level  \n",
       "0    0       0      0           0     0        0     0               1  \n",
       "1    0       0      0           0     0        0     0               2  \n",
       "2    0       0      0           0     0        0     0               0  \n",
       "3    0       0      0           0     0        0     0               2  \n",
       "4    1       0      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 225 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取数据\n",
    "# path to where the data lies\n",
    "train = pd.read_csv(\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 将类别字符串变成数字\n",
    "# drop ids and get labels\n",
    "\n",
    "#train = train[0:10000]\n",
    "y_train = train['interest_level']\n",
    "\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "#X_test = ss_X.transform(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\model_selection\\_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "# 训练样本6w+，交叉验证太慢，用train_test_split估计模型性能\n",
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part, X_val, y_train_part, y_val = train_test_split(X_train, y_train, train_size = 0.1,random_state = 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'\\nC_s = np.logspace(0, 4, 5)# logspace(a,b,N)\\xe6\\x8a\\x8a10\\xe7\\x9a\\x84a\\xe6\\xac\\xa1\\xe6\\x96\\xb9\\xe5\\x88\\xb010\\xe7\\x9a\\x84b\\xe6\\xac\\xa1\\xe6\\x96\\xb9\\xe5\\x8c\\xba\\xe9\\x97\\xb4\\xe5\\x88\\x86\\xe6\\x88\\x90N\\xe4\\xbb\\xbd \\ngamma_s = np.logspace(-2, 2, 5)  \\ntuned_parameters = dict( C = C_s, gamma = gamma_s)\\n\\nsvc = SVC()\\ngrid= GridSearchCV(svc, tuned_parameters,cv=5 ,return_train_score=True,n_jobs =6,pre_dispatch=6)\\ngrid.fit(X_train,y_train)\\n'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "'''\n",
    "C_s = np.logspace(0, 4, 5)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-2, 2, 5)  \n",
    "tuned_parameters = dict( C = C_s, gamma = gamma_s)\n",
    "\n",
    "svc = SVC()\n",
    "grid= GridSearchCV(svc, tuned_parameters,cv=5 ,return_train_score=True,n_jobs =6,pre_dispatch=6)\n",
    "grid.fit(X_train,y_train)\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_RBF(C, gamma, X_train, y_train, X_val, y_val):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC3 =  SVC( C = C, kernel='rbf', gamma = gamma, cache_size = 2048)\n",
    "    SVC3 = SVC3.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC3.score(X_val, y_val)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.694081095076\n",
      "accuracy: 0.694081095076\n",
      "accuracy: 0.694081095076\n",
      "accuracy: 0.694081095076\n",
      "accuracy: 0.694081095076\n",
      "accuracy: 0.694081095076\n",
      "accuracy: 0.694081095076\n",
      "accuracy: 0.694081095076\n",
      "accuracy: 0.694081095076\n",
      "accuracy: 0.694081095076\n",
      "accuracy: 0.695454443119\n",
      "accuracy: 0.691446968503\n",
      "accuracy: 0.692775288741\n",
      "accuracy: 0.693563275323\n",
      "accuracy: 0.693968525565\n",
      "accuracy: 0.680595267578\n",
      "accuracy: 0.65979242182\n",
      "accuracy: 0.689488259\n",
      "accuracy: 0.693067969471\n",
      "accuracy: 0.693720872639\n",
      "accuracy: 0.64763491456\n",
      "accuracy: 0.651732444785\n",
      "accuracy: 0.689465745098\n",
      "accuracy: 0.693045455569\n",
      "accuracy: 0.693720872639\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-2, 2, 5)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-2, 2, 5)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train_part, y_train_part, X_val, y_val)\n",
    "        accuracy_s.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n68f69etL/blczz//PJ9++mmZP18RrrrqKnbtKrzq6ffff0/Xrl3p2LEj3bp148cffyy0XVJSEhde\neCGRkZFcfPHFJCfrDXHOWXA49LsfEr6BP3+yOpoyeeCiKPx9bEydX30v1NNkUUFWr17N+vXrmTRp\nEtdccw3r169n/fr1RERElGo9ZU0W5yIzM5OZM2dyzTXXVOh2S+v222/nueeeK/S9+vXrM3fuXDZu\n3Mh7773HDTfcUGi7p59+miFDhrB9+3bOO+88nn32WU+GXH30vQeCm8H3EyA7y+poSq1ekD93xLVi\nYcLfrNqVZHU4ltBkUQnMnz+f3r1707VrV6655hpOnnTcsXb8+PG0a9eOTp068fDDD/PTTz8xb948\n7r///jKdleT6+OOP6dixIx06dGDixDODjm+++SZRUVHExcVxyy23cN999wGwaNEiunfvjt1uB2DV\nqlV06tSJPn36MH78eGJiYgDYuXMn5513Hl26dKFbt26sXr0agMWLF9O/f3+uvPJKIiMjeeyxx/jo\no4/o3r07nTp1yvse119/PXfddRf9+/enVatWLF++nNGjR9O2bVtuvvnmvDhvvfVWYmNjad++PZMm\nTcpbHhcXx/fff092dsFpjl27dqVRo0YAdOzYkRMnTpCZWbDY3ezZsxk9ejQAo0eP5ptvvinTPlb5\n+NZwdEf9/Qes+8DqaMrk5n4taRQcwNNzN5OT433XjpyrKj0bytW/v91Ewv6Ucl1nu8a1eXJ4+3Na\nx6FDh5g6dSpLliyhZs2aPP3000yfPp2bb76ZefPmsWnTJkSE48ePExISwtChQ7nyyiu59NKyXUCf\nmJjIY489Rnx8PMHBwQwcOJDvvvuOzp07M3XqVNatW0etWrWIi4ujR48eAKxYsYJu3brlrWPMmDF8\n+OGH9OjRg3/96195yxs1asSiRYsICAhgy5YtjB49Oi9hbNiwgc2bNxMcHExERAR33nkna9as4YUX\nXuDVV1/l+eefByA5OZmlS5fyv//9j+HDh/PLL7/Qtm1bunbtyh9//EGHDh2YOnUqYWFhZGVl5SWh\ndu3aYbfbiYiI4I8//qBz585F7oMvv/ySnj17Fjr1NSkpiXr16gHQpEkTDhw4UKb9rArRbiREnOco\nA9L+csdFe16khp+dfw1qw4P/t4HZG/ZxWZdwq0OqUHpmYbGVK1eSkJBAnz59iImJ4ZNPPmH37t2E\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10fca518>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_SVM_Otto.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 采用C = 1  gamma = 0.01 参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SVC(C=1, cache_size=2048, class_weight=None, coef0=0.0,\n",
       "  decision_function_shape='ovr', degree=3, gamma=0.01, kernel='rbf',\n",
       "  max_iter=-1, probability=False, random_state=None, shrinking=True,\n",
       "  tol=0.001, verbose=False)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "SVC3 = SVC(C = 1, kernel='rbf', gamma = 0.01, cache_size = 2048)\n",
    "SVC3.fit(X_train_part, y_train_part)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>listing_id</th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7142618</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7185</td>\n",
       "      <td>-73.9865</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7210040</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7278</td>\n",
       "      <td>-74.0000</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7103890</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7306</td>\n",
       "      <td>-73.9890</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7143442</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7109</td>\n",
       "      <td>-73.9571</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>6860601</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7650</td>\n",
       "      <td>-73.9845</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 225 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   listing_id  bathrooms  bedrooms  latitude  longitude  price  \\\n",
       "0     7142618        1.0         1   40.7185   -73.9865   2950   \n",
       "1     7210040        1.0         2   40.7278   -74.0000   2850   \n",
       "2     7103890        1.0         1   40.7306   -73.9890   3758   \n",
       "3     7143442        1.0         2   40.7109   -73.9571   3300   \n",
       "4     6860601        2.0         2   40.7650   -73.9845   4900   \n",
       "\n",
       "   price_bathrooms  price_bedrooms  room_diff  room_num  ...   virtual  walk  \\\n",
       "0      1475.000000     1475.000000        0.0       2.0  ...         0     0   \n",
       "1      1425.000000      950.000000       -1.0       3.0  ...         0     0   \n",
       "2      1879.000000     1879.000000        0.0       2.0  ...         0     0   \n",
       "3      1650.000000     1100.000000       -1.0       3.0  ...         0     0   \n",
       "4      1633.333333     1633.333333        0.0       4.0  ...         0     0   \n",
       "\n",
       "   walls  war  washer  water  wheelchair  wifi  windows  work  \n",
       "0      0    0       0      0           0     0        0     0  \n",
       "1      0    1       0      0           0     0        0     0  \n",
       "2      0    0       0      0           0     0        0     0  \n",
       "3      0    0       0      0           1     0        0     0  \n",
       "4      0    1       0      0           0     0        0     0  \n",
       "\n",
       "[5 rows x 225 columns]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读取test数据\n",
    "test_data = pd.read_csv(\"RentListingInquries_FE_test.csv\")\n",
    "test_data.head()\n",
    "\n",
    "#SVC3.predict_proba(X_Val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# \n",
    "test_id = test_data['listing_id']\n",
    "test_data.drop(['listing_id'], inplace = True, axis = 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 74659 entries, 0 to 74658\n",
      "Columns: 224 entries, bathrooms to work\n",
      "dtypes: float64(7), int64(217)\n",
      "memory usage: 127.6 MB\n"
     ]
    }
   ],
   "source": [
    "test_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 标准化\n",
    "X_test = ss_X.fit_transform(test_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "#预测\n",
    "lr_y_predict_test = SVC3.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    low\n",
       "1    low\n",
       "2    low\n",
       "3    low\n",
       "4    low\n",
       "Name: interest_level, dtype: object"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submission = pd.DataFrame()\n",
    "submission['listing_id'] = test_id\n",
    "submission['interest_level'] = lr_y_predict_test\n",
    "\n",
    "y_map = {2: 'low', 1: 'medium', 0: 'high'}\n",
    "submission['interest_level'] = submission['interest_level'].apply(lambda x: y_map[x])\n",
    "\n",
    "submission['interest_level'].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "submission.to_csv('w2_SVM_predict_resulf.csv', index = False)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
